from typing import Optional, Any
from app.core.redis import get_redis


async def redis_set(
    key: str,
    value: Any,
    expire_seconds: Optional[int] = None
) -> bool:
    """
    设置 Redis 键值对
    :param key: 键名
    :param value: 键值 (支持任意可序列化类型)
    :param expire_seconds: 过期时间(秒)，None表示永不过期
    :return: 是否设置成功
    """
    redis = await get_redis()
    if expire_seconds:
        result = await redis.setex(key, expire_seconds, value)
    else:
        result = await redis.set(key, value)
    return result is True


async def redis_get(key: str) -> Optional[str]:
    """
    获取 Redis 键值
    :param key: 键名
    :return: 键值，不存在返回 None
    """
    redis = await get_redis()
    return await redis.get(key)


async def redis_delete(key: str) -> int:
    """
    删除 Redis 键
    :param key: 键名
    :return: 被删除的键数量
    """
    redis = await get_redis()
    return await redis.delete(key)


async def redis_exists(key: str) -> bool:
    """
    检查键是否存在
    :param key: 键名
    :return: 是否存在
    """
    redis = await get_redis()
    return await redis.exists(key) == 1


async def redis_expire(key: str, seconds: int) -> bool:
    """
    设置键过期时间
    :param key: 键名
    :param seconds: 过期时间(秒)
    :return: 是否设置成功
    """
    redis = await get_redis()
    return await redis.expire(key, seconds) is True
